home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / xshp15.zip / README < prev    next >
Text File  |  1992-01-12  |  7KB  |  156 lines

  1. This is the source for the X-Sharp 3-D animation package, as
  2. presented in the Graphics Programming column in Dr. Dobb's Journal,
  3. as of the April 1992 issue.  A couple of bugs in the code from the
  4. April 1992 column are fixed in this archive.  The code has been tested
  5. with Borland C++ 3.0 and TASM 3.0.  To make X-Sharp, run K.BAT.
  6.  
  7. Unpack this archive with PKZIP -d; the ball generation code belongs
  8. in the .\BALL subdirectory, and, because it has some of the same
  9. filenames as the main directory, problems will result without -d.
  10.  
  11. Files in this archive:
  12.  
  13. POLYGON.H    - polygon & 3-D header file
  14. MAKEFILE     - Borland Make makefile
  15. INITFIX.C    - initializes fixed-point data
  16. GENCOS.C     - generates cosine table for fixed-point look-up
  17. FILLCNVX.C   - fills a convex polygon
  18. APPROT.C     - appends rotations in X, Y, and Z
  19. DRAW.ASM     - draws the scanned-out pixels of a convex polygon in mode X
  20. MODE.ASM     - initializes the screen to mode X (320x240, 256 colors)
  21. XSHARP15     - ID file for the X-Sharp version
  22. LINKRESP     - TLINK response file
  23. MOVEPOLY.C   - updates the position and orientation of a polygon-based object
  24. SHOWPAGE.ASM - selects the video page that's visible
  25. SCAN.ASM     - scans out an edge of a convex polygon
  26. FILLRECT.ASM - fills a rectangle with a solid color in mode X
  27. TURBOC.CFG   - Borland C++ 3.0 configuration file. Uses 3.0-specific
  28.                 options, which must be changed for 2.0 and earlier
  29. DRAWPOBJ.C   - draws a polygon-based object
  30. README       - this file
  31. INITBALL.C   - initializes the ball-shaped object
  32. K.BAT        - remakes X-Sharp, producing XS.EXE
  33. BALVERT0.INC - include file that defines ball-shaped object
  34. COSTABLE.INC - include file for fixed-point cosines between 0 and 90 degrees
  35. XSHARP.C     - main() for this animation
  36. INITCUBE.C   - initializes the cube-shaped objects
  37. OLIST.C      - object list initialization, handling, and sorting
  38. FIXED.ASM    - fixed point arithmetic routine (some are 386-dependent)
  39. XFPROJ.C     - transforms and projects polygon-based objects
  40. BALL         - subdirectory; see below
  41.  
  42. The subdirectory .\BALL contains the source code and executable for
  43. the program GENBALL, which creates the vertex and face lists for a
  44. ball made from rectangular faces (BALVERT0.INC was created by GENBALL).
  45. Remake GENBALL by running K.BAT in the .\BALL directory.  See the
  46. 12/29/91 log entry for details.
  47.  
  48. Note that this code uses 386-specific instructions.
  49.  
  50. Comments and questions may be directed to me in the following ways:
  51.  
  52. Bix: graphic.disp or graphic.pgms conferences or Bixmail (mabrash)
  53. MCI mail (mabrash)
  54. M&T Online programming.graphics conference (mabrash)
  55. U.S. Mail (7 Adirondack Street, South Burlington, VT 05403)
  56.  
  57. Bix is the best way to get hold of me.
  58.  
  59. This material may be used freely; it is provided free of charge, as
  60. are responses to questions and comments, within reason.  Should the
  61. spirit move you, a contribution to the Vermont Assocation for the
  62. Blind and Visually Impaired, sent care of Dr. Dobb's Journal, myself,
  63. or directly to VABVI, would be appreciated, and would motivate me to
  64. keep enhancing X-Sharp.
  65.  
  66. Vermont Association for the Blind and Visually Impaired
  67. 37 Elmwood Avenue
  68. Burlington, VT 05401
  69.  
  70. Dr. Dobb's Journal
  71. 411 Borel Avenue, Suite 100
  72. San Mateo, CA 94403-3522
  73.  
  74. ----------------------
  75. Michael Abrash  1/12/92
  76.  
  77.  
  78. ******************
  79. * Log of changes *
  80. ******************
  81.  
  82. **********************************************************************
  83. Begin entry for 1/5/92
  84.  
  85. ----------
  86. Altered ConcatXforms to add in the translation element from matrix #1
  87. only when multiplying by the fourth column of matrix #2, because only
  88. the fourth column has a 1 at the bottom.  This fixes a bug in earlier
  89. versions that showed up when a world->view transformation involving
  90. translation was used.
  91.  
  92. ----------
  93. Removed setting of non-existent element XformToWorld[3][3] in INITCUBE.C
  94. and INITBALL.C.
  95.  
  96. **********************************************************************
  97. Begin entry for 12/29/91
  98.  
  99. ----------
  100. Converted XformVec and ConcatXforms to assembly language, reducing
  101. transformation and concatenation time to 5% or less of total time.
  102.  
  103. ----------
  104. Converted sin() and cos() calls to calls to the assembly language
  105. function CosSin(), which performs a table look-up.  Changed angle
  106. representations from radians to tenths of degrees to facilitate table
  107. look-up and to maximize accuracy.
  108.  
  109. ----------
  110. Put all the assembly language functions in fixed.asm, replacing
  111. l4.c and l9.asm.
  112.  
  113. ----------
  114. Deleted one cube from the animation, and substituted a ball.  The
  115. ball has a radius of 25, slightly larger than the cube it replaces.
  116. It has 6 bands of 12 facets each, for a total of 72 faces,
  117. approximately doubling the number of polygons in the animation, and
  118. has 62 vertices, increasing the number of vertices by more than 50%.
  119. Added INITBALL.C to initialize the ball, and added a call to
  120. InitializeBalls() to create the ball in main().  Only one ball is
  121. created, but more balls could easily be added, and the size of and
  122. number of bands in the ball(s) could easily be changed.
  123.  
  124. The program GENBALL, in .\BALL, generates all vertex and face info
  125. for a generic ball (it doesn't generate the color info, which varies
  126. from instance to instance).  The number of bands of faces and the
  127. size of the ball are prompted for when GENBALL is run.  The output of
  128. GENBALL with 6 bands and a radius of 25 is in BALVERT0.INC, and is
  129. included in INITBALL.C, which initializes a ball for use in the
  130. animation program.  To change the size, just regenerate BALVERT0.INC
  131. by running GENBALL with bands = 6 and the desired radius.  To change
  132. the number of bands, run GENBALL with the desired number of bands and
  133. radius, and then change the Colors array in INITBALL.C to have one
  134. color entry for each face in the new ball. (The number of faces is
  135. shown as a define at the top of the output file from GENBALL.) 
  136. Additional balls may be added by changing NUM_BALLS, and by adding a
  137. new entry to each array at the top of GENBALL.C.
  138.  
  139. ----------
  140. Changed object list from an array to a linked list that is sorted
  141. in back-to-front order after each set of moves, so drawing the list
  142. in order performs proper hiding of objects.
  143.  
  144. ----------
  145. Renamed source files more meaningfully, and renamed executable XS.EXE.
  146.  
  147. ----------
  148. Added a center (0,0,0) point to each object, which is transformed into
  149. view space each time the object is transformed.  This is used for
  150. Z-sorting objects for drawing precedence purposes, and can also be
  151. used for collision detection and the like.
  152.  
  153. End entry for 12/29/91
  154. **********************************************************************
  155.  
  156.